Graph analysis is a recently popularized methodology in data analysis that considers fine-grained relationships between data entities. Conventional graph processing systems are optimized for either transactional workload or analytic workload but not both.
An analytic workload tends to be read intensive. Whereas, transactional workload tends to be update intensive.
Updating a graph typically spends much time preparing data structures and/or consumes large amounts of memory. Furthermore, many approaches fail to handle removal of vertices or edges efficiently.
An important requirement for graph analytics is (interactive) real-time data analysis. For instance, a client may monitor rapidly emerging data (e.g. twitter stream, credit card transactions), to quickly detect critical information (e.g. fraudulent uses) in the data. Such a real-time analysis requires both fast analysis and quick update of graph data.
Fast analysis and quick updating of graph data is difficult or impossible using a disk-based graph database system which does not provide the needed level of performance for analysis. An in-memory graph analytics system may be used. However, an in-memory graph analytics system is limited by the available memory and the time needed to materialize a new graph snapshot out of an original graph and a change set.